<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Usuarios_model extends CI_Model {

    function __construct(){
        parent::__construct();
    }
    
    public function count(){
        return $this->db->count_all_results('usuario');
    }
    
    public function listar($limit, $offset){
        $this->db->limit($limit, $offset);
        $query = $this->db->get('usuario');
        return $query->result();
    }
    public function consultarPorId($idusuario = NULL){
        
        if($idusuario != NULL){
            $this->db->where('idusuario',$idusuario);
            $this->db->limit(1);
            return $this->db->get('usuario');

        }else{
            return FALSE;
        }
        
    }
    
    public function consultarPorCpf($cpf = NULL){
        
        if($cpf != NULL){
            $this->db->where('cpf',$cpf);
            $this->db->limit(1);
            return $this->db->get('usuario');
           
        }else{
            return FALSE;
        }
        
    }
    
    public function telefone($condicao = NULL){
        if($condicao != NULL){
            $this->db->select('*');
            $this->db->from('telefone');
            $this->db->join('telefone_has_usuario', 'telefone_has_usuario.telefone_idtelefone = telefone.idtelefone');
            $this->db->where('usuario_idusuario',$condicao);
            return $this->db->get();
        }
        
    }
    
    public function idTelefonePorNumero($condicao = NULL){
        if($condicao != NULL){
            $this->db->select('idtelefone');
            $this->db->from('telefone');
            $this->db->where('num_telefone',$condicao);
            return $this->db->get();
           
        }
        
    }
    public function email($condicao = NULL){
        if($condicao != NULL){
            $this->db->select('*');
            $this->db->from('email');
            $this->db->join('email_has_usuario', 'email_has_usuario.email_idemail = email.idemail');
            $this->db->where('usuario_idusuario',$condicao);
            return $this->db->get();
           
        }
        
    }
    
    public function idEmailPorEndereco($condicao = NULL){
        if($condicao != NULL){
            $this->db->select('idemail');
            $this->db->from('email');
            $this->db->where('end_email',$condicao);
            return $this->db->get();
           
        }
        
    }
    
    public function inserir($dados = NULL, $telefones = NULL, $emails = NULL){
      
        if($dados != NULL && in_array(true, $dados)){
          
            $this->db->insert('usuario',$dados);

            if ($telefones != NULL && in_array(true, $telefones)){
                 
                if($dados['cpf']!=NULL){
                    
                    $this->db->insert('telefone',$telefones);
                    
                    $idusuario   = $this->consultarPorCpf($dados['cpf'])->row();
                    $idtelefone  = $this->idTelefonePorNumero($telefones['num_telefone'])->row();
                    $telefone_has_usuario = array('usuario_idusuario'=>$idusuario->idusuario,
                                                      'telefone_idtelefone'=>$idtelefone->idtelefone);
                    
                    $this->db->insert('telefone_has_usuario',$telefone_has_usuario);
                }
            }
            
            if ($emails != NULL && in_array(true, $emails)){
                  
                if($dados['cpf'] != NULL){
                    
                    $this->db->insert('email',$emails);
                
                    $idusuario  = $this->consultarPorCpf($dados['cpf'])->row();
                    
                    $idemail    = $this->idEmailPorEndereco($emails['end_email'])->row();
                    $email_has_usuario = array('usuario_idusuario'=>$idusuario->idusuario,
                                                      'email_idemail'=>$idemail->idemail);
                    $this->db->insert('email_has_usuario',$email_has_usuario);
                }
            }
            $this->session->set_flashdata('cadastrook','Registro efetuado com sucesso!');
            redirect('usuarios/inserir');
        }
    }
    
    public function editar($dados = NULL, $condicao = NULL){
           
        if($dados != NULL && in_array(true, $dados) && $condicao != NULL){
          
            $emails       = $this->email($condicao['idusuario'])->row();  
            @$idemail      = array('idemail'=>$emails->idemail);
            $end_email    = array('end_email'=>array_pop($dados));
           
            $telefones    = $this->telefone($condicao['idusuario'])->row();
            @$idtelefone   = array('idtelefone'=>$telefones->idtelefone);
            $num_telefone = array('num_telefone'=>array_pop($dados),'operadora'=>array_pop($dados),
                                  'tipo'=>array_pop($dados));
          
            if($idemail != NULL && in_array(true, $idemail)&& in_array(true, $end_email)){
                $this->db->update('email', $end_email, $idemail);
            }
            elseif($end_email != NULL && in_array(true, $end_email)){
                $this->db->insert('email',$end_email);
                $idusuario  = $condicao['idusuario'];
                $idemail    = $this->idEmailPorEndereco($end_email['end_email'])->row();
                $email_has_usuario = array('usuario_idusuario'=>$idusuario,
                                                  'email_idemail'=>$idemail->idemail);
                $this->db->insert('email_has_usuario',$email_has_usuario);
                
            }
            else{
                $foreing_key = array('email_idemail'=>$idemail['idemail']);
                $this->db->delete('email_has_usuario', $foreing_key);
                $this->db->delete('email', $idemail);  
            }
            
            
            if($idtelefone != NULL && in_array(true, $idtelefone) && in_array(true, $num_telefone)){
                $this->db->update('telefone', $num_telefone, $idtelefone);
            }
            elseif($num_telefone != NULL && in_array(true, $num_telefone)){
                $this->db->insert('telefone',$num_telefone);
                $idusuario   = $condicao['idusuario'];
                $idtelefone  = $this->idTelefonePorNumero($num_telefone['num_telefone'])->row();
                $telefone_has_usuario = array('usuario_idusuario'=>$idusuario,
                                                      'telefone_idtelefone'=>$idtelefone->idtelefone);
                $this->db->insert('telefone_has_usuario',$telefone_has_usuario);
            } 
            else{
                $foreing_key = array('telefone_idtelefone'=>$idtelefone['idtelefone']);
                $this->db->delete('telefone_has_usuario', $foreing_key);
                $this->db->delete('telefone', $idtelefone);  
            }
            
            
            
           
            $this->db->update('usuario', $dados, $condicao);
            
            $this->session->set_flashdata('edicaook','Edição efetuada com sucesso!');
            redirect(current_url());
            
        }  
    } 
    
    public function excluir($condicao = NULL){
        die("Código Interrompido por: Rodolfo Custódio");
        if($condicao != NULL){
            
            $foreing_key = array('usuario_idusuario'=>$condicao);
            $idusuario   = array('idusuario'=>$condicao);
            
            $email   = $this->email($condicao)->row();
            @$idemail = array('idemail'=>$email->email_idemail);
            
            $telefone   = $this->telefone($condicao)->row();
            @$idtelefone = array('idtelefone'=>$telefone->telefone_idtelefone);
            
            $this->db->delete('email_has_usuario', $foreing_key);
            $this->db->delete('telefone_has_usuario', $foreing_key);
            
            $this->db->delete('email', $idemail);
            $this->db->delete('telefone', $idtelefone);
            $this->db->delete('usuario', $idusuario);
             
            $this->session->set_flashdata('exclusaook','Exclusão efetuada com sucesso!');
            redirect('usuarios');
            
        }
    }
}